// 导入 http 模块
import http from 'wechat-http'
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'
/**
 * 配置请求拦截器
 */
http.intercept.request = (params) => {
  // 每次发送请求的时候触发
  // console.log("请求拦截器触发");
  // 判断是否有token 有的话就把token携带过去
  const app = getApp()
  if (app.token) {
    params.header = {
      // 把之前就有的数据添加进来 以防数据丢失
      Authorization: `Bearer ${app.token}`,
      ...params.header,
    }
  }
  // console.log(params);
  // 过滤接口返回的数据
  return params
}
/**
 * 配置响应拦截器
 */
http.intercept.response = async (res) => {
  // token过期 重新获取
  if (res.statusCode === 401) {
    // 判断refreshToken是否过期 根据判断401来源是不是由于/refreshToken请求导致的
    if (res.config.url.includes("/refreshToken")) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route

      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirector=${redirectURL}`,
      })
    }
    // 发送请求重新获取token
    const app = getApp()
    // 使用refreshToken更新token
    const result = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: 'Bearer ' + app.refreshToken
      }
    })
    // console.log(49, result);
    // 重新获取token
    const { token, refreshToken } = result.data
    // 更新token
    app.setToken(token, refreshToken)
    // 重新请求 继续未完成的操作、
    return await http({
      ...res.config,
      header: {
        Authorization: 'Bearer ' + token
      }
    })
  }
  // 过滤接口返回的数据
  return res.data
}
/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http
